<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>this练习题</title>
  </head>
  <body>
    <script>
      //  //T1.
      //   function fun() {
      //     console.log(this.s);    ----obj.1
      //   }
      //   var obj = {
      //     s: 1,
      //     f: fun,
      //   };
      //   var s = 2;
      //   obj.f();

      // //T2.
      //   function fun() {
      //     console.log(this.s);   ---windown.2
      //     var obj = {
      //       s: 1,
      //       f: fun,
      //     };
      //   }
      //   var s = 2;
      //   fun();

      // //T3.
      //   var A = {
      //     name: "jmq",
      //     f: function () {
      //       console.log(this.name);
      //     },
      //   };
      //   var B = {
      //     name: "syc",
      //   };
      //   B.f = A.f;
      //   A.f();       ----var A .jmq
      //   B.f();       ----var B .syc

      // //T4.
      // function fo() {
      //   console.log(this.a);
      // }
      // var o1 = {
      //   a: 3,
      // };
      // var o2 = {
      //   a: 6,
      // };
      // var a = 9;
      // o1.f = fo;
      // console.log(o1);    
      // o2.f = o1.f;
      // o1.f(); // 输出什么？   var o1 .3
      // o2.f(); // 输出什么？   var o2 .6

      ////T5.
      // function foo() {
      //   console.log(this.a);
      // }
      // var obj2 = {
      //   a: 2,
      //   fn: foo,
      // };
      // var obj1 = {
      //   a: 1,
      //   o1: obj2,
      // };
      // obj1.o1.fn(); // 输出的是啥？    1 谁调用就指向谁，obj1调用，所以obj1里面的o1的obj2的函数指向obj1，obj1的a是1

      // //T6.
      // var a = 10;
      // var obj = {
      //   a: 120,
      //   method: function () {
      //     var bar = function () {
      //       console.log(this.a); // 输出什么？   10   this所在的函数赋给了变量bar  bar普通调用 所以this是指向window window.a=10
      //     };
      //     bar();
      //     return this.a; // 输出什么？ 120   method调用方式是obj调用，所以this指向obj  obj.a=120
      //   },
      // };
      // console.log(obj.method());

      //T7.
      // var fullName = "language";
      // var obj = {
      //   fullName: "javascript",
      //   prop: {
      //     getFullName: function () {
      //       return this.fullName;
      //     },
      //   },
      // };
      // console.log(obj.prop.getFullName()); // 这里输出什么？   -----javascript  obj调用，所以this指向obj，obj的fullName=javascript
      // var test = obj.prop.getFullName;
      // console.log(test()); // 这里输出什么

      // //T8.
      // function fn() {
      //   console.log(this);
      // }
      // setInterval(fn, 1000); // 这里打印啥？  ----window     反复调用的定时器,1秒后调用fn函数

      // //T9.
      // var k = {
      //   a: 1,
      //   sing: function () {
      //     console.log(this);
      //   },
      // };
      // setTimeout(k.sing(), 1000); // 这里打印的是啥？  --- var k     变量k调用，所以指向k

      // //T10.
      // var value = 8;
      // var obj = {
      //   value: 10,
      //   fn: () => {
      //     console.log(this.value); //打印什么   ----10    obj调用，所以指向obj  obj.value=10
      //   },
      // };
      // obj.fn();
    </script>
  </body>
</html>
